package com.lzy.cloud.goods.service.carRent;

import com.lzy.cloud.goods.dtos.CarCalendarDto;

import java.math.BigDecimal;
import java.util.List;

public interface CarCalendarService {

    /**
     * 新增房车档期
     * @param carCalendarDto
     * @return
     */
    int insertSelective(CarCalendarDto carCalendarDto);

    /**
     * 查询每月数据
     *
     * @param carCalendarDto
     * @return
     */
    List<CarCalendarDto> selectOneMonthList(CarCalendarDto carCalendarDto);

    /**
     * 更新或新增单个房车单个档期
     * @param carCalendarDto
     * @return
     */
    Boolean updateByCarIdAndOneDate(CarCalendarDto carCalendarDto);

    /**
     * 更新单个房车多个档期（档期区间）
     * @param carCalendarDto
     * @return
     */
    Boolean updateByCarIdAndDates(CarCalendarDto carCalendarDto);

//    /**
//     * 根据车型id和日期查询数量
//     * @param carCalendarDto
//     * @return
//     */
//    int findByCarIdAndDate(CarCalendarDto carCalendarDto);

    /**
     * 根据车型id查找
     * @param carCalendarDto
     * @return
     */
    CarCalendarDto findByCarId(CarCalendarDto carCalendarDto);

//    CalendarDto findByCalendarId(CalendarDto record);

//    int updateByCarId(CalendarDto record);
//
    int updateCarCalendar(CarCalendarDto record);
//
//    int updateByCarIdAndWeek(CalendarDto record);

    /**
     * 价格列表
     * @Description: TODO
     * @return List<CarCalendarDto>
     * @param carCalendarDto
     * @return
     * @author lyz
     * @date 2017年5月17日  下午1:04:54
     */
    List<CarCalendarDto> priceList(CarCalendarDto carCalendarDto);

    /**
     * 根据房车id及日期更新档期状态
     * @param carCalendarDto
     * @return
     */
    int updateCalendarTypeByCarIdAndDate(CarCalendarDto carCalendarDto);

    /**
     * 根据 carId及日期区间 获取档期
     * @param carCalendarDto
     * @return
     */
    public List<CarCalendarDto> findCalendarByCarIdAndDate(CarCalendarDto carCalendarDto);

    /**
     * 根据carId得到档期最小价格
     */
//    BigDecimal findLowestPriceByCarId(CalendarDto record);

    /**更新节假日档期
     *
     * @param carCalendarDto
     * @return
     */
    int updateByCarIdAndVacations(CarCalendarDto carCalendarDto);

    /**
     * 查询一星期价格
     * @param carCalendarDto
     * @return
     */
    List<CarCalendarDto> priceWeekList(CarCalendarDto carCalendarDto);

    /**
     *验证是否存在档期
     * @param carCalendarDto
     * @return
     */
    Integer selectVacationsAndDate(CarCalendarDto carCalendarDto);

    /**
     * 查询档期
     * @param id
     * @return
     */
    CarCalendarDto selectByPrimaryKey(Long id);

    /**
     * 获取档期最小价格(房车参考价)
     * @param carCalendarDto
     * @return
     */
    BigDecimal selectCarPrice (CarCalendarDto carCalendarDto);

    Integer findExistCalendar (Long carId);

    int delScheduleByCarId(Long carId);

    void delByDate(CarCalendarDto dto);

    CarCalendarDto selectByCarIdAndDate(CarCalendarDto dto);

    /**
     * 批量设置单个房车档期区间（区间内的区间）
     */
    Boolean updateByWeekdaysAndDate(CarCalendarDto carCalendarDto,String weekdays);

    /**
     * 根据id删除
     * @param id
     * @return
     */
    Boolean delById(Long id);
}
